IPv4 数据包
复习
- 无线网络:无线接入点协调设备发送,应对隐藏节点
- 协议分层与封装:协议分层把通信问题拆成互相协作的职责
- 为什么还需要 IP:MAC 地址只适合本地链路,IP 提供可路由的层次地址
TL;DR
- IPv4 数据包提供跨网络传递的统一信封
- 首部含源、目的 IP 地址、上层协议、长度与生存时间等字段
- 每台路由器查看目的地址、减少 TTL,再决定下一跳
正文
有了 IP 地址,接下来要看的就是承载它、并让数据走遍网络的那个“信封”——IPv4 数据包(IPv4 packet)。
信封上都写了什么
IPv4 首部里有一些字段特别值得认识:
- 源 IP、目的 IP 地址:从哪来、到哪去
- 上层协议:里面的数据该交给传输层的哪一种协议
- 长度:这个包一共多长
- 生存时间 TTL:还能经过多少台路由器
这个“上层协议”字段,和链路层帧里的类型字段是同一个思路:告诉接收方,里面的内容属于哪一类,该转交给谁。 分层与封装的思想,在这里又一次出现。
一棒一棒往前传
数据包的旅程是这样的:链路层把它装进当前这一跳的帧里发出去;每台路由器收到后,查看目的 IP 地址,把 TTL 减一,再决定下一跳该往哪走,然后用新的链路层帧重新包装、继续转发。
注意这里的分工:IP 数据包负责端到端的方向,而帧只负责单跳。 包可以一直保持不变地穿过许多种不同的链路——有线、无线都行——而每段链路各自用自己的帧格式和 MAC 地址。
TTL:防止包迷路
那个 TTL 字段,看似不起眼,其实很关键。每经过一台路由器就减一,减到零就丢弃。为什么需要它?
因为网络里可能出现路由环路:包在两台(或几台)路由器之间来回打转。要是没有 TTL,这个包就会永远转下去,白白耗尽网络资源。TTL 就像给每封信设定一个“最多转寄次数”,到点就作废,从而保住了整个系统的安全。
那么,IP 地址本身又是怎样构成的?下一章细说。
思考题 1
TTL 为什么要每经过一台路由器减一?
思考题 2
IP 数据包穿越不同类型的链路时保持地址不变,而帧每跳都要换。为什么这样设计?
小结
知识点
- IPv4 包携带端到端地址,帧只负责单跳
- 首部含地址、协议、长度与 TTL 等字段
- TTL 防止包在路由环中无限转发
参考资料
- Wikipedia(zh):IPv4:互联网协议第四版的包格式与规则
- Wikipedia(zh):生存时间:限制数据包可经过跳数的字段
思考题答案(仅供参考)
思考题 1
它防止路由环中的包被无限转发、耗尽网络资源。一旦 TTL 减到零,包就被丢弃,环路不会造成持续负担。这是用一个小小的计数,换来了整个网络的健壮。
思考题 2
因为端到端的寻址和单跳的交付是两件不同的职责。IP 地址指明“最终去哪个网络的哪台机器”,一路不变;而链路层帧只服务于当前这一段链路,到了下一跳,介质和 MAC 地址都可能不同,所以必须重新包装。这正是分层设计带来的灵活性。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图

设计师 | 南国微雪